package com.fh.shop.api.sms.biz;

import com.alibaba.fastjson.JSON;
import com.fh.shop.api.common.ResponseEnum;
import com.fh.shop.api.common.ServerResponse;
import com.fh.shop.api.common.SystemConstant;
import com.fh.shop.api.sms.result.SMSResult;
import com.fh.shop.api.util.KeyUtil;
import com.fh.shop.api.util.RedisUtil;
import com.fh.shop.api.util.SMSUtil;
import com.fh.shop.api.util.ValidateUtil;
import org.apache.commons.lang3.StringUtils;
import org.springframework.stereotype.Service;

@Service("smsService")
public class ISMSServiceImpl implements ISMSService {


    @Override
    public ServerResponse sendMsg(String phone) {
        //=======验证
        // 非空验证
        if (StringUtils.isBlank(phone)) {
            return ServerResponse.error(ResponseEnum.PHONE_IS_NULL);
        }
        // 手机号格式正确【java正则表达式】
        if (!ValidateUtil.isPhone(phone)) {
            return ServerResponse.error(ResponseEnum.PHONE_FORMAT_IS_ERROR);
        }
        //=======业务
//        {
//            "code": 200,
//            "msg": "88",
//            "obj": "1908"
//        }
        // 个人手机上收到了短信验证码 1908
        String result = SMSUtil.sendMsg(phone);
        // 将result中的 验证码 存入到redis
        // 从result中得到验证码 【json转给java对象】
        SMSResult smsResult = JSON.parseObject(result, SMSResult.class);
        // 验证码
        String obj = smsResult.getObj();
        int code = smsResult.getCode();
        if (code != SystemConstant.SMS_OK) {
//            return ServerResponse.error(ResponseEnum.SMS_SEND_ERROR);
            return ServerResponse.error(SystemConstant.SMS_ERROR, "短信发送失败,错误码为:"+code+",请联系管理员！！！");
        }
        // 发送成功，存入redis
        // redis的key具备业务含义 sms:code:15001359482  sms:code:17001359482
        RedisUtil.setEx(KeyUtil.buildSMSKey(phone), obj, SystemConstant.SMS_EXPIRE);
        return ServerResponse.success();
    }
}
